package ThreadTest;



class Info{
    private String title;
    private String content;
    public boolean flag=true;
    //flag=true :表示可以生产，但是不可以取走
    //flag=flase:表示可以取走，但是不可以生产。
    public synchronized void  set(String title,String content){
        //重复进入到set（）方法里，发现不能够生产。所以要等待。
        if (this.flag==false){
            try {
                super.wait();
            }catch (InterruptedException e){
                e.printStackTrace();
            }

        }
        this.title=title;
        try {
            Thread.sleep(200);

        }catch (InterruptedException e){
            e.printStackTrace();
        }
        this.content=content;
        this.flag=false;//修改生产标志。
        super.notify();//唤醒其它等待线程.
    }
    public synchronized void get(){

        if(this.flag==true){//还没生产呢
            try {
                System.out.println("请等待生产,标识符为"+flag);
                super.wait();

            }catch (InterruptedException e){
                e.printStackTrace();
            }

        }
        System.out.println(this.title+"-"+this.content);
        this.flag=true;
        super.notify();
    }
}
class Productor implements Runnable{

    private Info info;
    public  Productor(Info info){
        this.info=info;
    }
    @Override
    public void run() {

 for (int x=1;x<100;x++){

        if (x%2==0){//偶数
            System.out.println("生产ing");
            this.info.set("小明","好学生");
        }else {
            System.out.println("生产ing");
            this.info.set("草泥马","萌动物");

        }
    }

    }
}


class Customer implements Runnable{
    private Info info;
    public Customer(Info info)
    {
        this.info=info;
    }
    @Override
    public void run() {
      for (int x=0;x<100;x++){
            this.info.get();
        }


     this.info.get();


    }
}


public class TestDemo {
    public static void main(String[] args) {
        Info I=new Info();
        new Thread(new Productor(I)).start();
        new Thread(new Customer(I)).start();



    }

}
